############################################################################# # Jeux de données fournis # ############################################################################# from plantes import plantes, Plante # Plante à rajouter from mesures import mesures ############################################################################# # Écrire le code de la fonction croissance_moyenne de la question 1 # ############################################################################# def croissance_moyenne(plantes): if plantes == []: return None total = 0 for plante in plantes: total = total + plante.croissance return total / len(plantes) def test_croissance_moyenne(): p1 = Plante("A", "esp1", 10, 20, "ombre") p2 = Plante("B", "esp2", 20, 30, "plein soleil") assert croissance_moyenne([p1, p2]) == 15 assert croissance_moyenne([]) is None test_croissance_moyenne() ############################################################################# # Écrire le code de la fonction dictionnaire_mesure de la question 2 # ############################################################################# def dictionnaire_mesure(plantes, mesures): dico = {} for plante in plantes: dico[plante.nom] = [] for mesure in mesures: if mesure["plante"] in dico: dico[mesure["plante"]].append(mesure) return dico def test_dictionnaire_mesure(): p1 = Plante("Basilic", "Ocimum basilicum", 60, 40, "plein soleil") p2 = Plante("Fougère", "Dryopteris filix-mas", 90, 80, "ombre") liste_plantes = [p1, p2] liste_mesures = [ {"jour": 1, "plante": "Basilic", "hauteur": 10, "temperature": 22, "humidite": 60}, {"jour": 2, "plante": "Basilic", "hauteur": 12, "temperature": 23, "humidite": 58}, {"jour": 1, "plante": "Tomate", "hauteur": 15, "temperature": 21, "humidite": 55} ] resultat = dictionnaire_mesure(liste_plantes, liste_mesures) assert "Basilic" in resultat assert "Fougère" in resultat assert len(resultat["Basilic"]) == 2 assert resultat["Fougère"] == [] test_dictionnaire_mesure() ############################################################################# # Fonction défaillante à analyser et corriger pour les questions 3 et 4 # ############################################################################# def purger_mesures_extremes(liste_mesures): resultat = [] for mesure in liste_mesures: if 20 <= mesure["temperature"] <= 25: resultat.append(mesure) return resultat def test_purger(): mesures_test = [ {'jour': 1, 'plante': 'Basilic', 'temperature': 18.0}, {'jour': 2, 'plante': 'Basilic', 'temperature': 19.0}, {'jour': 3, 'plante': 'Basilic', 'temperature': 22.0}, {'jour': 4, 'plante': 'Basilic', 'temperature': 28.0}, {'jour': 5, 'plante': 'Basilic', 'temperature': 29.0} ] mesures_test = purger_mesures_extremes(mesures_test) print("Résultat après la purge :") for m in mesures_test: print(f"Jour {m['jour']} : {m['temperature']}°C") test_purger() #L’erreur logique vient du fait que la fonction fournie parcourt la liste tout en supprimant des éléments dans cette même liste. Quand on enlève un élément pendant un parcours direct avec for mesure in liste_mesures, certains éléments sont sautés. C’est pour cela que des températures extrêmes restent parfois dans la liste finale. On le voit dans la fonction donnée dans culture.py